{
  interface Book {
    id: number;
    title: string;
    price: number;
  }

  class Container<T>{
    //
    store: T[];

    //构造方法
    constructor(store: T[]){
      this.store = store;
    }

    //声明一个方法
    add(arg: T){
      this.store.push(arg);
    }
  }

  // let c = new Container<string>(['a','b','c','d']);
  let books = new Container<Book>([]);
  //add 是要将新的书籍加入到 store 的容器中
  books.add({
    id: 2,
    title:'红楼梦',
    price: 19.8
  });
}

{
  //定义一个接口
  interface LengthMust{
    length: number;
  }

  //泛型约束 获取数据的 length 属性
  function getLength<T extends LengthMust>(arg: T){
    return arg.length;
  }

  let result = getLength<string>('12321');
  let result2 = getLength<number[]>([1,2,3,4]);
}